﻿using System;
using System.Collections.Generic;
using System.Linq; //Enumerable

namespace Rsdn.Janus
{
    internal class MessageViewerActiveMessageService : IActiveMessagesService
    {
        private readonly MsgViewer _messageViewer;

        /// <summary>
        /// Initializes a new instance of the <see cref="MessageViewerActiveMessageService"/> class.
        /// </summary>
        /// <param name="messageViewer">The message viewer.</param>
        /// <exception cref="ArgumentNullException"><paramref name="messageViewer"/> is <c>null</c>.</exception>
        public MessageViewerActiveMessageService(MsgViewer messageViewer)
        {
            if (messageViewer == null)
            {
                throw new ArgumentNullException("messageViewer");     //MLHIDE
            }

            _messageViewer = messageViewer;
        }

        #region IActiveMessageService Members

        /// <summary>
        /// Должно принудительно вызывать обновление комманд 'имитируя' изменение сообщение
        /// Например при выделений всех сообщений в гриде команды должны 'пересчитаться', но сообщения фактически не изменились
        /// </summary>
        public void UpdateMessageState()
        {
            _messageViewer.UpdateMsgState();
        }

        /// <summary>
        /// Активные сообщения.
        /// </summary>
        /// <value>The active messages.</value>
        public IEnumerable<IMsg> ActiveMessages
        {
            get
            {
                return _messageViewer.Msg != null
                    ? new[] { _messageViewer.Msg }
                    : Enumerable.Empty<IMsg>();
            }
        }

        /// <summary>
        /// Возникает когда активные сообщения изменились.
        /// </summary>
        public event EventHandler ActiveMessagesChanged
        {
            add { _messageViewer.MsgChanged += value; }
            remove { _messageViewer.MsgChanged -= value; }
        }

        #endregion
    }
}